#include <stdio.h>
const int max = 3;

int decreasePointer();
int comparePointer();

int main(int argc, char const *argv[])
{
    /* code 递增一个指针数组*/
    int var[] = {10, 100, 200};
    int i, *ptr;
    // 指针中的数组地址,数组var 可以直接赋值给 指针变量 ptr 因为指针指向数组的第一个元素吧
    ptr = var;
    for (int i = 0; i < max; i++)
    {
        /* code */
        printf("存储地址：var[%d]=%p\n", i, ptr);
        printf("存储值:   var[%d]=%d\n", i, *ptr);

        //  将指针指向下一个位置 因为数组 var 是一个int数组，所以呢 指针增大或者缩小都是按照 指针的类型来进行跳跃的，一个int 4 个字节，又因为内存最基本的分配单位是字节
        // 所以地址 0061FF0C 标识的是字节数，不是bit 数，所以 ptr++ 就是要向右移动一个int的长度，也就是 4 个字节，又因为 0061FF0C标识的就是字节，所以下一个就是
        // 0061FF0C+4
        ptr++;
    }

    printf("=================================\n");
    decreasePointer();
    printf("===============下面是指针比较==================\n");
    comparePointer();

    return 0;
}

int decreasePointer()
{
    /* code 递增一个指针数组*/
    int var[] = {10, 100, 200};
    int i, *ptr;
    // 把指针指向最后一个元素，然后指针慢慢的往后递减，就可以访问数组的元素
    ptr = &var[2];
    for (int i = 2; i >= 0; i--)
    {
        /* code */
        printf("存储地址：var[%d]=%p\n", i, ptr);
        printf("存储值:   var[%d]=%d\n", i, *ptr);
        ptr--;
    }

    return 0;
}

// 指针大小比较
int comparePointer()
{
    int var[] = {10, 100, 200};
    int i, *ptr, *lastEle;
    ptr = var; // 将第一个元素的指针赋值给指针变量
    i = 0;
    // 获取最后一个元素的指针
    lastEle = &var[2];
    while (ptr <= lastEle)
    {
        /* code */
        printf("存储地址：var[%d]=%p\n", i, ptr);
        printf("存储值:   var[%d]=%d\n", i, *ptr);
        printf("\n");
        i++;
        ptr++;
    }
}
